Sistema de Nombrado en Java (JNDI) [Parte I]

Podemos especificar propiedades de entorno para el JNDI usando el par�metro de entorno del constructor de InitialContext y ficheros de recursos de aplicaci�n. Tambi�n se podr�an especificar varias propiedades de entorno JNDI usando propiedades del sistema y par�metros de applet, como se describe en secciones posteriores.

.�Ficheros de Recursos de Aplicaci�n

Para simplificar la tarea de configurar el entorno necesario para una aplicaci�n JNDI, podr�amos distribuir ficheros de recursos de aplicaci�n junto con los componentes de la aplicaci�n y los proveedores de servicios. Un fichero de recursos de aplicaci�n tiene el nombre jndi.properties. Contiene una lista de parejas clave/valor presentadas en el formato de fichero de propiedades (ver java.util.Properties).

La clave es el nombre de la propiedad (por ejemplo, java.naming.factory.object) y el valor es un string en el formato definido para esa propiedad.

Aqu� tenemos un ejemplo de un fichero de recursos de aplicaci�n.

java.naming.factory.object=com.sun.jndi.ldap.AttrsToCorba:com.wiz.from.Person
java.naming.factory.state=com.sun.jndi.ldap.CorbaToAttrs:com.wiz.from.Person
java.naming.factory.control=com.sun.jndi.ldap.ResponseControlFactory
java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
java.naming.provider.url=ldap://localhost:389/o=jnditutorial
com.sun.jndi.ldap.netscape.schemaBugs=true

Observamos que no se aplican restricciones sobre los tipos de propiedades de entorno que podemos tener en este fichero.

El JNDI lee autom�ticamente el ficheros de recursos de aplicaci�n desde los classpaths de todos los componentes y desde JAVA_HOME/lib/jndi.properties, donde JAVA_HOME es el directorio que contiene nuestro JRE (Java Runtime Environment). El JNDI pone las propiedades de estos ficheros a disposici�n de los proveedores de servicios y de otros componentes que necesiten utilizarlas. Por lo tanto estos ficheros deben considerarse como abiertos a todo el mundo y no deber�an contener informaci�n sensible, como passwords, etc.

Nota:

Excepto para JAVA_HOME/lib/jndi.properties, los ficheros de recursos de aplicaci�n s�lo se soportan cuando se usa la Plataforma Java 2. Si usamos el JDK 1.1, s�lo podremos ver JAVA_HOME/lib/jndi.properties.

Por ejemplo, abajo tenemos un programa que lista un contexto sin especificar ninguna propiedad de entorno en el constructor de InitialContext.

InitialContext ctx = new InitialContext();
NamingEnumeration enum = ctx.list("");

Si ejecutamos este programa con el fichero jndi.properties mostrado anteriormente, listar� los contenidos de la entrada o=jnditutorial en el servidor LDAP especificado.

El uso de ficheros de recursos de aplicaci�n para especificar cualquier propiedad de entorno JNDI permite configurar al JNDI con una programaci�n m�nima. Usando el fichero JAVA_HOME/lib/jndi.properties, tambi�n podemos configurar el JNDI para todas las aplicaciones y applets JNDI que usen el mismo interprete Java.

Si usamos ficheros de recursos de aplicaci�n, debemos recordar conceder a nuestro applet o aplicaci�n los permisos para leer todos los ficheros de recursos de aplicaci�n.

.�Propiedades del Sistema

Una propiedad del sistema es una pareja clave/valor que el entorno de ejecuci�n java define para describir al usuario, en entorno del sistema y el sistema java. El entorno de ejecuci�n define y usa un conjunto de propiedades del sistema por defecto. Se pueden poner otras propiedades a disposicion de un programa Java mediante la opci�n -D de la l�nea de comandos del int�rprete java. Por ejemplo, ejecutando el int�rprete de la siguiente forma.

# java -Dmyenviron=abc Main

se a�ade la propiedad myenviron con el valor abc a la lista de propiedades del sistema visible para el programa Main.

La clase java.lang.System contiene m�todos est�ticos para leer y actualizar propiedades del sistema. La habilidad de leer o actualizar cualquier propiedad del sistema est� controlado por la pol�tica de seguridad del sistema de ejecuci�n Java.

El JNDI lee las siguientes propiedades est�ndars JNDI desde las propiedades del sistema.

java.naming.factory.initial
java.naming.factory.object
java.naming.factory.state
java.naming.factory.control
java.naming.factory.url.pkgs
java.naming.provider.url
java.naming.dns.url	

Cuando configuramos propiedades del sistema, estas propiedades de entorno afectan a los contextos de todas las aplicaciones o applets (si el applet tiene permisos para leer dichas propiedades).

Usando el mismo programa del ejemplo de fichero de recursos de aplicaci�n anterior, especificando la factor�a de contexto inicial a usar dando el contexto inicial a utilizar en la l�nea de comandos. Aqu� tenemos dos ejemplos.

# java -Djava.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory \
      -Djava.naming.provider.url=ldap://localhost:389/o=jnditutorial \
      List
# java -Djava.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory \
      -Djava.naming.provider.url=file:/tmp \
      List 

El primer ejemplo usa LDAP, y el segundo usa el sistema de ficheros.

Usar las propiedades del sistema para especificar propiedades de entorno est�ndar JNDI permite configurar el JNDI con una programaci�n m�nima. Sin embargo, probablemente s�lo es conveniente usarlas desde scripts. Esto es por que los �tems con nombres de propiedades largos deben especificarse sobre la l�nea de comandos. Tambi�n, los applets generalmente no tienen permiso para leer propiedades del sistema arbitrarias y debe concedersele expl�citamente el permiso para hacerlo.

.�Par�metros de Applet

Podemos pasarle par�metros a un applet usando una sencilla pareja clave/valor. Estas se especifican en el fichero HTML que referencia al applet.

El c�mo se especifican dependen del contexto del applet. Por ejemplo, si el applet es referenciado desde una etiqueta applet, especificaremos los par�metros usando la etiqueta param. Aqu� tenemos un ejemplo.

<param 
name=java.naming.factory.initial
value=com.sun.jndi.ldap.LdapCtxFactory>

<param
name=java.naming.provider.url
value=ldap://localhost:389/o=jnditutorial>

Si el applet es referenciado desde el Java Plug-in, especificaremos sus par�metros usando parejas de clave/valor.

Aqu� tenemos un ejemplo.

java.naming.provider.url="ldap://localhost:389/o=jnditutorial"
java.naming.factory.initial="com.sun.jndi.ldap.LdapCtxFactory"

Para que el JNDI acceda a los par�metros de un applet, debemos configurar la propiedad de entorno Context.APPLET ("java.naming.applet"). El JNDI lee las siguientes propiedades est�ndars del JNDI desde los par�metros del applet.

java.naming.factory.initial
java.naming.factory.object
java.naming.factory.state
java.naming.factory.control
java.naming.factory.url.pkgs
java.naming.provider.url
java.naming.dns.url	

Aqu� tenemos un ejemplo que a�ade una propiedad ("java.naming.applet") al entorno.

// Put this applet instance into the environment
Hashtable env = new Hashtable();
env.put(Context.APPLET, this);

// Pass the environment to the initial context constructor
Context ctx = new InitialContext(env);

// List the objects 
NamingEnumeration enum = ctx.list(target);
while (enum.hasMore()) {
     out.println(enum.next());
}
ctx.close();

El JNDI obtiene las propiedades de entorno necesarias desde los par�metros del applet (mostrados anteriormente).

Este uso de los par�metros de applets para especificar propiedades de entorno JNDI est�ndars permite configurar al JNDI� de la misma forma que un applet realiza normalmente la configuraci�n de otros subsistemas o componentes. Las propiedades del sistema y los ficheros de recursos de aplicaci�n no son buenos mecanismos para que los applets dependan de ellos.

Porque los applets normalmente no pueden leer propiedades del sistema o ficheros arbitrarios (incluyendo jndi.properties).

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO